package com.springbootee.Common.base;

import com.springbootee.entity.User;
/**
 * @deprecated: 线程隔离
 * @parms :
 * @return:
 * @author: dell
 * @time: 2021/10/13 13:47
 */
public class UserHolder {

//    get()方法：获取与当前线程关联的ThreadLocal值。
//    set(T value)方法：设置与当前线程关联的ThreadLocal值。
//     remove()方法：将与当前线程关联的ThreadLocal值删除。
//    initialValue()方法：设置与当前线程关联的ThreadLocal初始值。

    //实现原理
//ThreadLocal最简单的实现方式就是ThreadLocal类内部有一个线程安全的Map，
// 然后用线程的ID作为Map的key，
// 实例对象作为Map的value，这样就能达到各个线程的值隔离的效果。
     private static final ThreadLocal<User> userHolder = new ThreadLocal<>();
     public static void setUser(User user){
         userHolder.set(user);
     }
    public static User getUser(){
         User user=userHolder.get();
         if (user==null){
            user=new User();
            user.setUserId(-1L);
            return user;
         }
         return userHolder.get();
    }
    public static void remove(){
        userHolder.remove();
    }

}
